using System;

namespace MLSharp.Utilities
{
	/// <summary>
	/// A special variation of <see cref="Action{T}"/> that 
	/// has a ref parameter instead of a normal parameter.
	/// </summary>
	/// <typeparam name="T"></typeparam>
	/// <param name="arg"></param>
	public delegate void RefAction<T>(ref T arg);

	/// <summary>
	/// Like <see cref="RefAction{T}"/>, but it adds a second
	/// (non-ref) parameter.
	/// </summary>
	/// <typeparam name="T1"></typeparam>
	/// <typeparam name="T2"></typeparam>
	/// <param name="arg1"></param>
	/// <param name="arg2"></param>
	public delegate void RefAction<T1, T2>(ref T1 arg1, T2 arg2);
}